#!/bin/bash

#####################################################
#                                                   #
#       Logger de la aplicación Consultar           #
#                                                   #
#   TP Sistemas Operativos - UBA - 2do Cuat. 2011   #
#                                                   #
#####################################################

LOGDIR=../logdir
LOGEXT=log
MAXLOGSIZE=1

#Códigos de error
ERROR_CANT_PARAM=1
ERROR_TIPO_MENS=2

#Cantidad de parámetros correcta
CANT_PARAM=3

function loguear
{
	max_log_size=$(expr $MAXLOGSIZE \* 1024)

	#Verificar parámetros
	if [ $# -ne $CANT_PARAM ] 
	then
		echo "Uso: $0 debe recibir $CANT_PARAM parametros:"
		echo "Comando"
		echo "Tipo de mensaje [I - A - E - SE]"
		echo "Mensaje a loggear"
		echo "Cantidad de parametros invalida" >&2
		exit $ERROR_CANT_PARAM
	fi 

	#Verificar tipo de mensaje
	if [ "$2" != "I" ] && [ "$2" != "A" ] && [ "$2" != "E" ] && [ "$2" != "SE" ]
	then
		echo "Tipo de comando invalido!" >&2
		exit $ERROR_TIPO_MENS
	fi

	#Verificar si existen los directorios y/o archivos
	filename="$1.$LOGEXT"
	filepath="$LOGDIR/$filename"
	if [ -d $LOGDIR ] 
	then
		if [ ! -f $filepath ]
		then
			touch $filepath
		fi
	else
		mkdir $LOGDIR
		touch $filepath
	fi

	user=$(whoami)
	date=$(date +"%m-%d-%Y %T")
	actual_size=$(stat -c%s "$filepath")

	#Comprobar log excedido
	if [ $actual_size -ge $max_log_size ]
	then
		echo "$user $date at $1: [A] ¡Log excedido!" >> $filepath
		#Truncar archivo
		file_lines=`cat $filepath | wc -l`
		file_lines=$(expr $file_lines / 2)
		sed -i 1,+${file_lines}d $filepath
	else
		echo "$user $date at $1: [$2] $3" >> $filepath
	fi

}

loguear $1 $2 $3

exit 0
